#!/bin/sh
#============================================================
#   WAN/WAN6 自动切换脚本 (Kwrt / OpenWrt)
#------------------------------------------------------------
#   功能:
#     • 自动检测当前 WAN / WAN6 绑定设备
#     • 在 eth0 与 eth2 之间自动切换
#     • 检查接口是否存在
#     • 自动保存并重启网络服务
#     • 输出详细步骤
#------------------------------------------------------------
#   作者: Jun Wan + ChatGPT
#   版本: v1.0 (2025-10)
#============================================================

echo "============================================================"
echo "             WAN/WAN6 自动切换脚本 (Kwrt/OpenWrt)"
echo "------------------------------------------------------------"
echo "功能说明:"
echo " - 自动检测当前 WAN / WAN6 接口 (eth0 <-> eth2)"
echo " - 自动切换并应用"
echo " - 自动检测接口存在性"
echo " - 输出详细过程"
echo "作者: Jun Wan + ChatGPT"
echo "============================================================"

# 获取当前接口
CUR_WAN=$(uci get network.wan.device 2>/dev/null)
CUR_WAN6=$(uci get network.wan6.device 2>/dev/null)

echo "[1/6] 当前 WAN 接口 : ${CUR_WAN:-未配置}"
echo "[2/6] 当前 WAN6 接口: ${CUR_WAN6:-未配置}"

# 默认接口设置
IF_A="eth0"
IF_B="eth2"

# 检查接口存在性
EXIST_IF0=$(ip link show $IF_A 2>/dev/null && echo 1 || echo 0)
EXIST_IF2=$(ip link show $IF_B 2>/dev/null && echo 1 || echo 0)

if [ "$EXIST_IF0" = "0" ] && [ "$EXIST_IF2" = "0" ]; then
    echo "错误: 未检测到 eth0 或 eth2，脚本终止。"
    exit 1
fi

# 判断要切换到哪个接口
if [ "$CUR_WAN" = "$IF_A" ] || [ "$CUR_WAN6" = "$IF_A" ]; then
    TARGET_IF=$IF_B
elif [ "$CUR_WAN" = "$IF_B" ] || [ "$CUR_WAN6" = "$IF_B" ]; then
    TARGET_IF=$IF_A
else
    # 如果当前未配置或为其他接口
    echo "警告: 当前 WAN 未绑定 eth0/eth2，将默认切换到 eth0。"
    TARGET_IF=$IF_A
fi

# 检查目标接口是否存在
if ! ip link show "$TARGET_IF" >/dev/null 2>&1; then
    echo "错误: 目标接口 $TARGET_IF 不存在。"
    exit 1
fi

echo "[3/6] 准备切换到接口: $TARGET_IF"

# 执行切换
uci set network.wan.device="$TARGET_IF"
uci set network.wan6.device="$TARGET_IF"
uci commit network
echo "[4/6] 配置已更新: network.wan.device=$TARGET_IF"

# 重启网络服务
echo "[5/6] 正在重启网络服务..."
/etc/init.d/network restart >/dev/null 2>&1
RET=$?

if [ "$RET" = "0" ]; then
    echo "[6/6] 网络服务已重启。"
else
    echo "警告: 网络重启失败，请手动检查。"
fi

# 显示结果
NEW_WAN=$(uci get network.wan.device 2>/dev/null)
NEW_WAN6=$(uci get network.wan6.device 2>/dev/null)
echo "------------------------------------------------------------"
echo "当前 WAN  接口: $NEW_WAN"
echo "当前 WAN6 接口: $NEW_WAN6"
echo "============================================================"
echo "切换完成。"
